{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9d586d39",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "4f61af1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-1.1311,  0.5315, -1.5401, -0.8595],\n",
       "        [ 0.6035,  2.4497,  0.3772, -0.0150],\n",
       "        [-0.3350,  1.5625,  0.3237,  1.4094],\n",
       "        [ 0.5938,  0.5370, -0.8777,  1.1608]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s=torch.randn(4,4)\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "dba0d221",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.dtype\n",
    "s1=s.view(torch.int64)\n",
    "s1.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "f3687eb0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 4541896440918623887, -4657837388720692730],\n",
       "        [ 4619787843929799848, -4866910716612764051],\n",
       "        [ 4595922499512533537,  4590407016327265747],\n",
       "        [ 4542292615136543767,  4581452046034579643]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "f3186776",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[[[ 0.2915,  2.3445,  0.3819,  0.5997],\n",
       "          [ 2.6861, -0.4374, -1.2405, -0.6024],\n",
       "          [ 1.8889,  1.3604, -2.1296, -0.1292]],\n",
       "\n",
       "         [[-0.1574,  1.9407,  2.2336, -0.3373],\n",
       "          [-0.0112,  0.9610, -1.4952, -0.5490],\n",
       "          [-0.4842, -1.1106,  0.2205, -1.0471]]]])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 2, 3, 4])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "torch.Size([4, 3, 2, 1])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s=torch.randn(1,2,3,4)\n",
    "display(s,s.shape)\n",
    "s1=s.view(4,3,2,1)\n",
    "s1.shape\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "9695f06a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[[[-0.6389, -0.1608, -0.8758,  0.1984],\n",
       "          [-0.5007, -0.3994, -0.4193, -0.7577],\n",
       "          [-1.3641,  0.2804,  1.7712, -0.4676]],\n",
       "\n",
       "         [[-0.0486,  2.1944, -0.8294, -0.5084],\n",
       "          [-0.3318,  0.4057, -1.5682, -1.5232],\n",
       "          [-0.5182,  0.9225, -0.6756, -0.4688]]]])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 2, 3, 4])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "tensor([[-0.6389, -0.1608, -0.8758,  0.1984],\n",
       "        [-0.5007, -0.3994, -0.4193, -0.7577],\n",
       "        [-1.3641,  0.2804,  1.7712, -0.4676],\n",
       "        [-0.0486,  2.1944, -0.8294, -0.5084],\n",
       "        [-0.3318,  0.4057, -1.5682, -1.5232],\n",
       "        [-0.5182,  0.9225, -0.6756, -0.4688]])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "torch.Size([6, 4])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "s=torch.randn(1,2,3,4)\n",
    "display(s,s.shape)\n",
    "s1=s.view(-1,4)\n",
    "display(s1,s1.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "23b46ed2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-0.6389, -0.1608, -0.8758,  0.1984],\n",
       "        [-0.5007, -0.3994, -0.4193, -0.7577],\n",
       "        [-1.3641,  0.2804,  1.7712, -0.4676],\n",
       "        [-0.0486,  2.1944, -0.8294, -0.5084],\n",
       "        [-0.3318,  0.4057, -1.5682, -1.5232],\n",
       "        [-0.5182,  0.9225, -0.6756, -0.4688]])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "torch.Size([6, 4])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "s2=s.reshape(-1,4)\n",
    "display(s2,s2.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "2120ec67",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.equal(s1,s2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "04ae20a4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "b19e78fa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(30, 3)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x1 = np.linspace(1,10,30).reshape(30,1)\n",
    "y1 = (np.zeros_like(x1)+2)+np.random.rand(30,1)*0.1\n",
    "z1 = (np.zeros_like(x1)+2).reshape(30,1)\n",
    "tr1 =  np.concatenate((x1,y1,z1),axis=1)\n",
    "tr1.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "2e129d75",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 15, 3)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = tr1[10:10+15].reshape(1,15,3)\n",
    "d.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "e3de9403",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-0.6389, -0.1608, -0.8758,  0.1984],\n",
       "        [-0.5007, -0.3994, -0.4193, -0.7577],\n",
       "        [-1.3641,  0.2804,  1.7712, -0.4676],\n",
       "        [-0.0486,  2.1944, -0.8294, -0.5084],\n",
       "        [-0.3318,  0.4057, -1.5682, -1.5232],\n",
       "        [-0.5182,  0.9225, -0.6756, -0.4688]])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "e36e88d9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([6, 4])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "ad3e29a4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[[-0.0432, -0.2575,  0.4270, -0.1026],\n",
       "         [-0.4582, -0.0286, -0.9963, -0.8491],\n",
       "         [-0.2421,  0.5424, -1.3142, -0.1689]],\n",
       "\n",
       "        [[-0.1043,  0.5917, -0.6087, -0.6969],\n",
       "         [-0.6345,  1.3031, -0.8672, -0.2026],\n",
       "         [-0.8217, -1.0480,  0.1950,  1.1319]]])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a=torch.randn(2,3,4)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "9be2ba6e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-0.0432, -0.2575,  0.4270, -0.1026],\n",
       "        [-0.1043,  0.5917, -0.6087, -0.6969]])"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[:,0,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "0a962aaa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1000,)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_steps=1000\n",
    "time = np.linspace(0, 2 * np.pi, n_steps)\n",
    "sine_wave = np.sin(time)\n",
    "sine_wave.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "47cb9202",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[[ 1.0640],\n",
       "         [-0.7745],\n",
       "         [ 0.7538]],\n",
       "\n",
       "        [[-0.4834],\n",
       "         [-2.1293],\n",
       "         [-0.8851]],\n",
       "\n",
       "        [[ 0.8890],\n",
       "         [ 1.2985],\n",
       "         [-1.5411]],\n",
       "\n",
       "        [[-0.1861],\n",
       "         [-0.1314],\n",
       "         [-1.2530]]])"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.randn(4,3).unsqueeze(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "fcc1de00",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([980, 20, 1])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inputs = []\n",
    "targets = []\n",
    "seq_length=20\n",
    "for i in range(len(sine_wave) - seq_length):\n",
    "    inputs.append(sine_wave[i:i+seq_length])\n",
    "    targets.append(sine_wave[i+seq_length])\n",
    "inputs = np.array(inputs)\n",
    "targets = np.array(targets)\n",
    "inputs = torch.from_numpy(inputs).float().unsqueeze(2)\n",
    "targets = torch.from_numpy(targets).float().unsqueeze(1)\n",
    "inputs.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "906c91b5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([980, 1])"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "targets.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "5207cc73",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([20, 1])"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inputs[0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "074f918b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1df82d995e0>]"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "x_d = np.arange(0,100)\n",
    "\n",
    "x_d_add = np.arange(0,100)\n",
    "\n",
    "\n",
    "plt.plot(x_d)\n",
    "plt.plot(np.arange(len(x_d),len(x_d)+100),np.sin(x_d_add))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "c0a376e3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(x_d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "374fabdb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n",
       "       113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,\n",
       "       126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,\n",
       "       139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,\n",
       "       152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,\n",
       "       165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,\n",
       "       178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,\n",
       "       191, 192, 193, 194, 195, 196, 197, 198, 199])"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange(len(x_d),len(x_d)+100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a17afaf3",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "21352661",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.89697102],\n",
       "       [0.56400021],\n",
       "       [0.36141171],\n",
       "       [0.61297723],\n",
       "       [0.8657233 ],\n",
       "       [0.76599004],\n",
       "       [0.73593225],\n",
       "       [0.79453762],\n",
       "       [0.23905439],\n",
       "       [0.43955134],\n",
       "       [0.39999611],\n",
       "       [0.07849245],\n",
       "       [0.85797105],\n",
       "       [0.98487597],\n",
       "       [0.42702852],\n",
       "       [0.04772534],\n",
       "       [0.59638329],\n",
       "       [0.22392388],\n",
       "       [0.91286882],\n",
       "       [0.8916654 ],\n",
       "       [0.86786409],\n",
       "       [0.15508588],\n",
       "       [0.14944384],\n",
       "       [0.05720338],\n",
       "       [0.05523968],\n",
       "       [0.42011307],\n",
       "       [0.05655459],\n",
       "       [0.18782756],\n",
       "       [0.57475792],\n",
       "       [0.20185581]])"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.random.rand(30,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7c726e1b",
   "metadata": {},
   "outputs": [],
   "source": [
    "x1 = np.linspace(1,10,30).reshape(30,1)\n",
    "y1 = (np.zeros_like(x1)+2)+np.random.rand(30,1)*0.1\n",
    "z1 = (np.zeros_like(x1)+2).reshape(30,1)\n",
    "tr1 =  np.concatenate((x1,y1,z1),axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "b71d2fbc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(30, 3)"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tr1.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "73884621",
   "metadata": {},
   "outputs": [],
   "source": [
    "data = tr1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "6b1aa49f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4.72413793, 2.04882453, 2.        ],\n",
       "       [5.03448276, 2.01017591, 2.        ],\n",
       "       [5.34482759, 2.0963453 , 2.        ],\n",
       "       [5.65517241, 2.04475962, 2.        ],\n",
       "       [5.96551724, 2.00042588, 2.        ],\n",
       "       [6.27586207, 2.00828633, 2.        ],\n",
       "       [6.5862069 , 2.02022344, 2.        ],\n",
       "       [6.89655172, 2.00265679, 2.        ],\n",
       "       [7.20689655, 2.06653361, 2.        ],\n",
       "       [7.51724138, 2.00482529, 2.        ],\n",
       "       [7.82758621, 2.03742403, 2.        ],\n",
       "       [8.13793103, 2.0260133 , 2.        ],\n",
       "       [8.44827586, 2.06902748, 2.        ],\n",
       "       [8.75862069, 2.01000988, 2.        ],\n",
       "       [9.06896552, 2.08454133, 2.        ]])"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "start = np.random.randint(10, size=1)[0]\n",
    "end = start + 15\n",
    "data[start + 5:end + 5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "5c724f3a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.nn as nn\n",
    "criterion = nn.MSELoss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "id": "3e512350",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(1.8054)"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1 = torch.randn(1,3,3)\n",
    "d2 = torch.randn(1,3,3)\n",
    "criterion(d1,d2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "id": "6cf087e0",
   "metadata": {},
   "outputs": [],
   "source": [
    "f=['代码', '币种', '款项性质', '期初金额 原币', '期初金额 本币', '本期借方(当月) 原币', '本期借方(当月) 本币', '本期贷方(当月) 原币', '本期贷方(当月) 本币', '本期借方(累计) 原币', '本期借方(累计) 本币', '本期贷方(累计) 原币', '本期贷方(累计) 本币', '期末数 原币', '期末数 本币',\n",
    "                   '1-2年','6个月内','6个月至1年内', '1年以内', '2-3年', '3年以上', '合计', '校验']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "id": "f8d3069c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "23"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5d69c4cd",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "torch_py38",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.7rc1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
